//! 期货测试网示例
//! 
//! 展示如何使用统一的Binance SDK调用期货测试网API

use binance_sdk_unified::{
    client::BinanceClientBuilder, ProductType, Environment, Result,
};

#[tokio::main]
async fn main() -> Result<()> {
    // 初始化日志
    tracing_subscriber::fmt::init();

    // 从环境变量加载配置
    let api_key = std::env::var("BINANCE_API_KEY").unwrap_or_else(|_| "test_api_key".to_string());
    let secret_key = std::env::var("BINANCE_SECRET_KEY").unwrap_or_else(|_| "test_secret_key".to_string());
    
    // 解析产品类型（默认使用UsdM期货）
    let product_type = match std::env::var("BINANCE_PRODUCT_TYPE").unwrap_or_else(|_| "UsdM".to_string()).as_str() {
        "Spot" => ProductType::Spot,
        "UsdM" => ProductType::UsdM,
        "CoinM" => ProductType::CoinM,
        "Options" => ProductType::Options,
        "Portfolio" => ProductType::Portfolio,
        _ => ProductType::UsdM,  // 默认使用USDT期货
    };
    
    // 解析环境（默认使用测试网）
    let environment = match std::env::var("BINANCE_ENVIRONMENT").unwrap_or_else(|_| "Demo".to_string()).as_str() {
        "Live" => Environment::Live,
        "Demo" => Environment::Demo,
        _ => Environment::Demo,  // 默认使用Demo模式
    };
    
    // 解析超时和重试
    let timeout = std::env::var("BINANCE_TIMEOUT_SECONDS").unwrap_or_else(|_| "30".to_string()).parse::<u64>().unwrap_or(30);
    let retry_count = std::env::var("BINANCE_RETRY_COUNT").unwrap_or_else(|_| "3".to_string()).parse::<u32>().unwrap_or(3);
    
    // 创建期货测试网客户端
    let client = BinanceClientBuilder::new(
        api_key,
        secret_key,
        product_type,
    )
    .environment(environment)
    .timeout(timeout)
    .retry_count(retry_count)
    .build()?;

    println!("测试Binance期货测试网API...");

    // 获取服务器时间
    match client.rest().market().get_server_time().await {
        Ok(server_time) => println!("✅ 服务器时间: {}", server_time.server_time),
        Err(e) => println!("❌ 获取服务器时间失败: {}", e),
    }

    // 获取交易对信息
    match client.rest().market().get_exchange_info().await {
        Ok(exchange_info) => {
            println!("✅ 交易对数量: {}", exchange_info.symbols.len());
            if let Some(symbol) = exchange_info.symbols.first() {
                println!("   第一个交易对: {}", symbol.symbol);
            }
        },
        Err(e) => println!("❌ 获取交易对信息失败: {}", e),
    }

    // 获取24小时价格统计
    match client.rest().market().get_24hr_ticker(Some("BTCUSDT")).await {
        Ok(ticker) => {
            println!("✅ BTCUSDT 24小时价格: {}", ticker.last_price);
            println!("   价格变化: {} ({})", ticker.price_change, ticker.price_change_percent);
        },
        Err(e) => println!("❌ 获取24小时价格统计失败: {}", e),
    }

    // 测试需要认证的API
    println!("\n测试需要认证的API...");
    match client.rest().account().get_account().await {
        Ok(account) => {
            println!("✅ 账户信息获取成功");
            println!("   余额数量: {}", account.balances.len());
        },
        Err(e) => println!("❌ 获取账户信息失败: {}", e),
    }

    println!("\n期货测试网API测试完成！");

    Ok(())
}
